컴퓨터 시스템 구조
2.1 컴퓨터 시스템의 동작
- 컴퓨터는 공유된 주기억장치에 접근을 제공하는 공통 버스에 의해 연결된 CPU와 여러 개의 장치 제어기(Device controller)로 구성되어 있습니다.
- 장치 제어기(Device Controller)
각 장치(디스크, 오디오 장치, 비디오 디스플레이)를 관리 - 장치 제어기와 CPU는 병행으로 수행되므로 이들은 주기억장치 접근에 대해 경쟁합니다. 주기억장치 제어기(Memory Controller)는 이들의 접근을 동기화해줍니다.
- 장치 제어기(Device Controller)
- 컴퓨터가 처음 구동되면 초기에 실행될 프로그램이 필요합니다. 이 프로그램을 부트스트랩 프로그램(Bootstrap program) 이라고 합니다. 이 프로그램은 보통 컴퓨터 하드웨어 내에 ROM(Read-Only-Memory)에 저장되어 있습니다.
- 부트스트랩 프로그램(Bootstrap program)
모든 하드웨어를 초기화하고 운영체제 커널을 주기억장치에 적재한 후에 커널을 실행
- 부트스트랩 프로그램(Bootstrap program)
- 컴퓨터에서 사건(Event)의 발생은 인트럽트(interrupt) 신호, 트랩(trap) 혹은 예외(Exception) 를 통해 운영체제에 통보됩니다. 사건이 발생되면 CPU는 현재 수행중인 작업을 멈추고, 운영체제 내에 있는 특정 코드를 실행합니다. 이 실행이 끝나면 다시 멈춘 작업을 재개합니다.
Interrupt
- Hardware Interrupt : 하드웨어는 CPU에 특정 신호를 보내어 인트럽트의 발생을 알림
– 예) 키보드 입력, I/O interrupt, timer ticks - 하드웨어가 시스템의 수행 흐름을 바꾸기 위해 발생하는 것
- 비동기식(Asynchronus Interrupt)
Trap
- Software Interrupt : 시스템호출(System call)이라는 특정 연산을 실행하여 일부로 발생시키거나 오류 때문에 자발적으로 발생
– 오류의 예) 0 나누기, 부적합한 주기억장치 접근(page fault) - 동기식(Synchronus Interrupt)
Exception
- 프로세서에 의해 자동으로 처리
- Faults 와 Aborts 로 세분화 가능
– Faults : 복구 가능한 오류 (recoverable error)
– Aborts : 처리하기 어려운 오류 (an error that is difficult to handle)
2.2 I/O 구조
- 장치 제어기(Device controller)에 따라 하나 이상의 장치가 제이거에 연결될 수 있습니다
- 장치 제어기는 지역 버퍼와 몇 개의 특수 목적 레지스터를 유지합니다
- 장치 제어기는 연결된 주변장치와 지역 버퍼 간에 데이터 이동을 책임집니다. 이 버퍼의 크기는 주변장치에 따라 다릅니다.
2.2.1 I/O Interrupt
- 입출력의 두 가지 형태
– 동기식 입출력(Synchronous I/O) : 입출력이 시작되면 요청한 프로세서는 입출력이 완료될 때까지 기다림
– 비동기식 입출력(Asynchronous I/O) : 요청한 프로세서는 입출력이 완료될 때까지 기다리지 않고 계속 다른 작업을 수행 - 입출력의 완료를 기다리는 방법
– 특수한 명령어 사용
– 대기 루프 사용 - 만약 CPU가 입출력 완료를 항상 기다리면 한번에 한 입출력만 가능
하지만 시스템의 효율을 높이기 위해 입출력과 계산을 병행할 수 있어야함으로 이 방법은 비효율적 - 운영체제는 여러 개의 입출력 요청을 관리하기 위해 장치 상태 테이블(device-status table) 을 유지합니다. 각 장치마다 대기큐를 유지합니다.
2.2.2 DMA 구조
- 속도가 느린 입출력 장치는 하나의 입력을 받은 후에 다음 입력까지 CPU는 다른 유용한 작업을 할 수 있습니다.
반대로 속도가 빠른 입출력 장치는 인트럽트가 너무 빈번하게 발생하여 CPU가 다른 유용한 작업을 할 시간이 없습니다. - 이것을 해결하기 위해 사용하는 기법이 DMA(Direct Memory Access) 입니다.
- DMA 방식에서 장치 제어기는 데이터 블록을 CPU의 관여없이 직접 주기억장치로 이동하며, 인터럽트는 바이트 단위가 아닌 블록 단위로 발생합니다.
2.3 저장 구조
컴퓨터 프로그래밍이 실행되기 위해서는 주기억장치(main memory / primary storage / internal memory) 에 적재되어야 합니다
주기억장치는 보통 동적 임의접근 메모리(dynamic Random-Access Memory, RAM)라고 하는 반도체 메모리를 사용
CPU가 직접 접근할 수 있는 기억장치는 주기억장치뿐입니다
주기억장치의 한 구성 단위를 워드(word) 라 하며, 각 워드는 독특한 주소를 가집니다
주기억장치의 크기 / 주기억장치의 휘발성 때문에 모든 프로그램과 데이터를 주기억장치에 영구적으로 저장할 수 없습니다
이 문제를 해결하기 위해 많은 양의 데이터를 영구 보관할 수 있는 보조 기억장치(auxiliary memory / secondary storage / external memory) 를 사용합니다
2.3.1 주기억장치
- Memory-mapped I/O
주기억장치의 일부 주소가 입출력을 위해 예약되어 있으며, 이 주소에서 읽거나 쓰면 장치 레지스터로부터 데이터를 읽거나 쓰는 결과가 되는 것 - CPU가 I/O 포트를 통해 연결된 장치와 데이터를 교환하는 2가지 방식
– Programmed I/O : CPU가 계속 장치의 상태를 검사(polling)하는 방식
– Interrupt : 다음 데이터를 처리할 준비가 되면 장치 제어기는 인터럽트를 통해 그 사실을 CPU에 알리는 방식 - 주기억장치와 CPU의 속도 차이를 극복하기 위해 주기억장치와 CPU 사이에 캐시(cache) 라고 하는 고속 메모리 버퍼를 사용
2.3.2 보조기억장치(자기 디스크)
자기 디스크는 플래터(platter) 라고 하는 여러 개의 원형 판으로 구성이 플래터는 다시 원형 모양의 트랙(track) 으로 구성
트랙은 다시 여러 개의 섹터(sector) 로 나뉘어짐
단순하게 섹터를 여러 개를 하나로 묶은 것을 클러스터(cluster) 라 하고, 같은 위치에 있는 트랙의 모음을 실린더(cylinder) 라고 합니다
– 클러스터는 운영체제에서 사용하는 데이터 저장의 최소 단위
디스크의 속도 = 컴퓨터로 데이터를 전송하는 비율인 전송률(transfer rate) + 임의접근 시간(random-access time)이라고 하는 위치결정 시간(positioning time)에 의해 결정됩니다
데이터의 교환은 특수한 제어기를 통해 이루어집니다
컴퓨터 연결 끝에는 호스트 제어기
디스크 자체 내에는 디스크 제어기 가 있습니다디스크 제어기는 자체적으로 캐시를 가지고 있습니다
실제 데이터는 디스크 제어기에 의해 디스크에서 캐시로 옮겨지고, 호스트 제어기는 캐시에 있는 데이터를 주기억장치로 옮깁니다
2.4 저장장치의 계층구조
- 계층구조에서 위에 위치할 수록 속도는 빠르지만 고가이며 휘발성의 성질을 가집니다
- 두 저장장치의 속도 차이는 중간에 빠른 캐시를 설치하여 극복할 수 있습니다
- 시스템을 구성할 때 저장장치의 계층구조를 균형있게 잘 구성하면 저렴한 가격에 높은 성능을 얻을 수 있습니다
2.4.1 캐싱
- CPU가 데이터를 필요하면 먼저 캐시에 그 데이터가 있는지 검사합니다
만약 있으면 캐시에서 바로 사용하고 없으면 주기억장치에 있는 데이터를 사용하지만 이 데이터의 복사본을 캐시에 보관합니다. 이는 데이터를 곧 다시 사용할 확률이 높기 때문입니다 - 캐시의 크기는 제한 되어 있으므로 이것을 잘 관리하여야 시스템의 성능을 높일 수 있습니다. 캐시의 크기와 교체 정책(replacement policy)을 잘 선택하면 원하는 데이터가 캐시에 있을 확률을 80%에서 99%까지 높일 수 있습니다
- 주기억장치는 CPU와 보조기억장치 사이에 있는 캐시로 사용될 수 있습니다
2.4.2 일관성
- 저장장치의 계층구조를 사용하면 같은 데이터가 여러 레벨에 존재할 수 있습니다
- 한번에 하나의 프로세스만 동작하면 아무 문제가 되지 않지만!
여러 프로세스가 같은 데이터를 접근하고자 하면 모든 프로세스가 최신의 데이터를 얻을 수 있도록 해야 합니다
이 문제는 다중프로세서 시스템에서 더욱 심각합니다 - 분산 환경에서는 여러 파일의 복사본이 여러 컴퓨터에 분산되어 있을 수 있습니다. 따라서 하나의 복사본에 대한 갱신이 이루어지면 다른 복사본도 갱신되도록 하여야 합니다
Reference
Difference between Trap and Interrupt
DMA-CPU몰래 영차영차